package command;

import beans.ListeFlux;
import beans.ListeNouvelles;
import beans.ListeUtilisateur;
import beans.NouvelleBean;
import beans.UtilisateurBean;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.*;

/**
 * @author Antonin Mozzati
 * @author Yannick Schürter
 */
public class SupprimerNouvelleCommand implements Command {

    @Override
    public String getCommandName() {
	return "supprimerNouvelle";
    }

    @Override
    public ActionFlow actionPerform(HttpServletRequest request) {
	String vue = "supprimerNouvelle";
	String erreur = "erreur";

	System.out.println(this.getCommandName());

	if (request.getParameter("nid") == null) {
	    return new ActionFlow(erreur, erreur + ".html", true);
	}

	ListeNouvelles listeNouvelles;
	ListeUtilisateur listeUtilisateur;
	ListeFlux listeFlux;

	try {
	    // On récupère les listes du ServletContext
	    listeNouvelles = (ListeNouvelles) request.getServletContext().getAttribute("listeNouvelles");
	    listeUtilisateur = (ListeUtilisateur) request.getServletContext().getAttribute("listeUtilisateur");
	    listeFlux = (ListeFlux) request.getServletContext().getAttribute("listeFlux");
	} catch (Exception ex) {
	    Logger.getLogger(SupprimerNouvelleCommand.class.getName()).log(Level.SEVERE, null, ex);
	    return new ActionFlow(erreur, erreur + ".html", true);
	}

	int idUtilisateur = (Integer) request.getSession().getAttribute("sessionID");
	UtilisateurBean ub = listeUtilisateur.getByID(idUtilisateur);


	int idNouvelle = Integer.parseInt(request.getParameter("nid"));
	NouvelleBean nb = listeNouvelles.getById(idNouvelle);
	
	if(nb==null){
	    request.setAttribute("erreur", "Erreur : cette nouvelle n'existe pas.");
	    return new ActionFlow(vue, vue + ".jsp", false);
	}

	// Vérification des droits de suppression.
	if (ub.getGroupeUtilisateur() == 2 || listeFlux.appartient(nb.getId_flux(), idUtilisateur)) {
	    listeNouvelles.removeNouvelleByID(idNouvelle);
	} else {
	    request.setAttribute("erreur", "Erreur : vous n'avez pas les droits nécessaire.");
	    return new ActionFlow(vue, vue + ".jsp", false);
	}

	request.setAttribute("ok", "La nouvelle \"" + nb.getTitreNouvelle() + "\" a été supprimée avec succès.");
	request.setAttribute("retour", nb.getId_flux());

	return new ActionFlow(vue, vue + ".jsp", false);
	
    }
}
